package tenant

import (
	"cgs-server/server/model"
	"go.mongodb.org/mongo-driver/bson/primitive"
	"time"
)

// Tenant 租户
type Tenant struct {
	model.BaseModel `bson:",inline"`
	//TenantId   string `json:"-" bson:"-"`     // 租户id
	TenantId   string `json:"tenantId" bson:"tenantId"`     // 租户id
	TenantName string `json:"tenantName" bson:"tenantName"` // 租户名称

	Admin *model.User `json:"admin" bson:"-"`
}

type TenantVo struct {
	*Tenant
	*model.User
	IsInitial bool // 是否是初始化租户
}

type Tenants []*Tenant

func (t *Tenants) TimeUtcToCst() {
	for _, bm := range *t {
		bm.TimeUtcToCst()
	}
}

// TenantInfo 租户信息
// 1. 用户信息
// 2. 账务信息
// 3. 用量统计
// 4. 组织信息
type TenantInfo struct {
	Id           primitive.ObjectID `json:"id" bson:"id"`                     // id
	Account      Account            `json:"account" bson:"account"`           // 账务信息
	Organization Organization       `json:"organization" bson:"organization"` // 组织信息

	model.TenantModel `json:",inline" bson:",inline"`
}

// Account 账务信息
type Account struct {
	//NodeId primitive.ObjectID	`json:"id" bson:"id"`	// id
	Version       string    `json:"version" bson:"version"`     // 版本信息：团队版、企业版、旗舰版
	BeginDate     time.Time `json:"beginDate" bson:"beginDate"` // 开始日期
	EndDate       time.Time `json:"endDate" bson:"endDate"`     // 结束日期
	IsTrial       *bool     `json:"isTrial" bson:"isTrial"`     // 是否在试用期
	RemainingDays int32     `json:"remainingDays" bson:"-"`     // 剩余天数

	Timeout bool `json:"timeout" bson:"-"`

	//model.TenantModel
}

// Organization 组织信息
type Organization struct {
	// Logo 组织 LOGO
	Logo string `json:"logo" bson:"logo"`

	// Ico
	Ico string `json:"ico" bson:"ico"`

	// Name 组织名称
	Name string `json:"name" bson:"name"`

	// 域名备案信息
	DomainRegistrationInfo string `json:"domainRegistrationInfo" bson:"domainRegistrationInfo"`

	// SerialNumber 组织编号
	SerialNumber string `json:"serialNumber" bson:"-"`

	// Location 所在地
	Location string `json:"location" bson:"location"`

	// Industry 所在行业
	Industry string `json:"industry" bson:"industry"`

	// Workplace 工作地点
	Workplace string `json:"workplace" bson:"workplace"`
}

func (t *TenantInfo) SetId(id primitive.ObjectID) {
	t.Id = id
}
func (t *TenantInfo) GetId() string {
	return t.Id.Hex()
}

func (a *Account) CalculateRemainDays() {
	if a.EndDate.IsZero() {
		a.RemainingDays = 0
	}
	timeStr := time.Now().Format("2006-01-02")
	today, _ := time.Parse("2006-01-02", timeStr)
	a.RemainingDays = int32((a.EndDate.Sub(today).Hours() + 8) / 24)
	if a.RemainingDays <= 0 {
		a.Timeout = true
	} else {
		a.Timeout = false
	}
}
